/*
 * Opciones.java
 *
 * Created on 15 de mayo de 2007, 11:04 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package InterfazBD;

import Beans.*;
import java.sql.*;
import java.util.*;

/**
 *
 * @author Marco
 */
public class Opciones {
    
    private BeanOpciones datosOpciones;
    
    private LinkedList<ResuSet> opciones;
    
    /** Creates a new instance of Opciones */
    public Opciones() {
    }

    /**
     * Getter for property datosOpciones.
     * @return Value of property datosOpciones.
     */
    public BeanOpciones getDatosOpciones() {
        return this.datosOpciones;
    }

    /**
     * Setter for property datosOpciones.
     * @param datosOpciones New value of property datosOpciones.
     */
    public void setDatosOpciones(BeanOpciones datosOpciones) {
        this.datosOpciones = datosOpciones;
    }
    
    /**
     * Agrega una opcion en caso de seleccion multiple o excluyente a un tema
     */    
    public void agregarOpcion() throws Exception {
        Conexion conexionBD = new Conexion();
        Connection conn = conexionBD.conectar();
        Statement stm = conn.createStatement();
        
        stm.execute("INSERT INTO web.opcion (idtema, correcto, enunciado) values ("+ 
                datosOpciones.getIdTema() + 
                ", \'"+datosOpciones.getCorrecto()+"\' " +
                ", \'"+datosOpciones.getEnunciado() +"\')");
        stm.close();
        conexionBD.desconectar();
    } 
    
    /**
     * Quita las opciones del tema
     */    
    public void borrarOpcion(int idTema) throws Exception {
        Conexion conexionBD = new Conexion();
        Connection conn = conexionBD.conectar();
        Statement stm = conn.createStatement();
        
        stm.execute("delete from web.opcion where idtema = "+idTema);
        stm.close();
        conexionBD.desconectar();
    } 
    
    /**
     * Trae el idOpcion de la base de datos y lo carga a el atributo del bean
     */
    public static int cargarIdOpcion(int idTem) throws Exception
    {
        Conexion conexionBD = new Conexion();
        Connection conn = conexionBD.conectar();
        Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                             ResultSet.CONCUR_UPDATABLE);
        ResultSet fila = stm.executeQuery("SELECT max(idopcion) FROM web.opcion " +
                                              "WHERE idtema = \'"+ idTem +"\'");
        fila.next();
            
        //trae el unico elemento del resulset
        int id = fila.getInt(1);
        
        stm.close();
        conexionBD.desconectar();
        
        return id;
    }

    /**
     * Trae las opciones de los temas pertenecientes a un examen
     */
    public void traerOpcionesTema(int idExam) throws Exception{
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();               
        
        opciones = new LinkedList();
        ResultSet opc = stm.executeQuery("SELECT * " +
                                         "FROM web.opcion " +
                                         "WHERE idtema in (select idtema from web.tema where idexamen = "+idExam + ") "+                                                        
                                         "ORDER BY idopcion");
        
        int nroOpcion = 1;
        int nroTemaAnterior = 0;
        while(opc.next()){                        
            ResuSet obj = new ResuSet();
            
            obj.SetColumna6(opc.getInt(1));
            obj.SetColumna7(opc.getInt(2));
            //para renumerar el nro de opcion cuando es un tema nuevo
            if (opc.getInt(2) != nroTemaAnterior){
                nroOpcion = 1;
            }                
            obj.SetColumna8(nroOpcion++);
            obj.SetColumna1(opc.getString(3));
            obj.SetColumna2(opc.getString(4));
                        
            opciones.add(obj);
            //para recordar en la ste iteracion el nro de tema anterior
            nroTemaAnterior = opc.getInt(2); 
        }     
    }

    /**
     * Devuelve el linked list a control
     */
    public LinkedList<ResuSet> getOpciones() {
        return opciones;
    }
    
    /**
     *Devuelve la cantidad de opciones que posee un tema
     */
    public int getCantOpciones(int idTema)throws Exception {
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();               
                
        ResultSet tem = stm.executeQuery("SELECT count(*) " +
                                         "FROM web.opcion " +
                                         "WHERE idtema = "+idTema);                                         
                        
        tem.next();
        int cant = tem.getInt(1);
        
        stm.close();
        conexionBD.desconectar();   
        
        return cant;
    }
    
}
